<?php
/**
 * Controller base para todos los controladores del sistema juridico 3
 * @author Sahib J. Leo
 */
class JuridicoController extends QuarkController
{
  /**
   * Titulo de la sección que se va a renderizar
   */
  private $_section_title = '';
  
  /**
   * Tipos de extracto disponibles para la aplicación
   */
  private $_tipos_extractos = array(
    1 => 'Nacimiento',
    2 => 'Matrimonio',
    3 => 'Defunción',
    4 => 'Inscripción',
    5 => 'Adopción',
    6 => 'Reconocimiento',
    7 => 'Divorcio',
    8 => 'Tutela',
  );
  
  private $_proposicion = array(
    0 => 'Asentó',
    1 => 'Omitió',
    2 => 'Asentó y omitió',
  );

  /**
   * Fundamentos del promovente (artículo 28)
   */
  private $_fundamentos_promovente = array(
    0 => 'Fracción I',
    1 => 'Fracción II',
    2 => 'Fracción III',
    3 => 'Fracción IV',
    4 => 'Fracción V',
    5 => 'Fracción VI',
  );
  
  /**
   * Fundamentos de la resolucion/procedencia
   */
  private $_fundamentos_resolucion = array(
    0  => 'No. 27 del Reglamento de la Ley del Registro Civil del Estado',
    1  => 'No. 31 Fracción I al V del Reglamento de la Ley del Registro Civil del Estado',
    2  => 'No. 128 de la Ley del Registro Civil del Estado',
    3  => 'No. 68 Del Codigo Civil del Estado',
    4  => 'No. 31 Fracción I del Reglamento de la Ley del Registro Civil del Estado',
    5  => 'No. 31 Fracción II del Reglamento de la Ley del Registro Civil del Estado',
    6  => 'No. 31 Fracción III del Reglamento de la Ley del Registro Civil del Estado',
    7  => 'No. 31 Fracción IV del Reglamento de la Ley del Registro Civil del Estado',
    8  => 'No. 31 Fracción V del Reglamento de la Ley del Registro Civil del Estado',
    9  => 'No. 121 Fracción IV de la Ley del Registro Civil del Estado',
    10 => 'No. 121 Fracción VII Insciso A de la Ley del Registro Civil del Estado',
    11 => 'No. 121 Fracción VII Insciso B de la Ley del Registro Civil del Estado',
    12 => 'No. 121 Fracción VII Insciso C de la Ley del Registro Civil del Estado',
    13 => 'No. 121 Fracción VII Insciso D de la Ley del Registro Civil del Estado',
    14 => 'No. 121 Fracción VII Insciso E de la Ley del Registro Civil del Estado',
    15 => 'No. 121 Fracción VII Insciso F de la Ley del Registro Civil del Estado',
    16 => 'No. 121 Fracción VII Insciso G de la Ley del Registro Civil del Estado',
  );

  /**
   * Posibles dueños de los documentos probatorios
   */
  private $_duenos_docs_probatorios = array(
    0  => 'El Registrado(a)',
    1  => 'La Madre del Registrado',
    2  => 'El Padre del Registrado',
    3  => 'Los Padres del Registrado',
    4  => 'El(La) Esposo(a) del Registrado',
    5  => 'El(La) Hijo(a) del Registrado',
    6  => 'El(La) Hermano(a) del Registrado',
    7  => 'El(La) Abuelo(a) del Registrado',
    8  => 'El(La) Nieto(a) del Registrado',
    9  => 'El(La) Tio(a) del Registrado',
    10 => 'El(La) Sobrino(a) del Registrado',
    11 => 'El Cónyuge',
    12 => 'La Cónyuge',
    /* 13 => 'No se necesita' */
    14 => 'El Apoderado(a)',
    15 => 'Finado(a)'
  );

  /**
   * Instancia de JuridicoDB
   * 
   * @access protected
   * @var JuridicoDB
   */
  protected $JuridicoDB;
  
  /**
   * Datos del usuario firmado
   * 
   * @access protected
   * @var Object
   */
  protected $SignedUser;

  public function __construct()
  {
    parent::__construct();

    // Instanciar objeto para consultar base de datos
    DGRC::config('informix', 'inf0rmix', true);
    $this->JuridicoDB = DGRC::JuridicoDB();
    
    /**
     * DEUBG:
     * Ignorar validación de sesión mientras se desarrolle fuera del web server de
     * DGRC.
     * Mientras tanto se genera manualmente el $this->SignedUser
     */
    
    $this->SignedUser = new stdClass();
    $this->SignedUser->id            = 3;
    $this->SignedUser->nombres       = 'SAHIB ALEJANDRO';
    $this->SignedUser->ape_pat       = 'JARAMILLO';
    $this->SignedUser->ape_mat       = 'LEO';
    $this->SignedUser->cve_munpio    = 0;
    $this->SignedUser->cve_oficialia = 0;

    /*

    // Validar la sesión generada por MainLogin de DGRC
    if(!isset($_SESSION[Quark::getConfigVal('session_name')]['data']
        ['logged_user'])){
      $this->changeActionName('quarkAccessDenied');
    } else {
      // Mantener accesibles los datos del usuario de una manera sencilla
      $this->SignedUser =
      (object)$_SESSION[Quark::getConfigVal('session_name')]['data']['logged_user'];
    }

    */
  }

  /**
   * Recibe la solicitud para cargar la lista de oficialias correspondientes
   * al municipio defindo por $_POST['municipio']
   */
  public function ajaxCargarOficialias()
  {
    try{
      $oficialias = DGRC::reg_jal()->sp_ver_oficialias(14, $_POST['municipio']);
      
      /*
       * Informix no devuelve datos en UTF8, hay que codificar los datos antes
       * de enviarlos por AJAX
       */
      foreach($oficialias as $i => $oficialia){
        $oficialias[$i]['descripcion'] = $oficialias[$i]['descripcion'];
      }

      $this->setAjaxResponse($oficialias);
    }catch(PDOException $e){
      $this->setAjaxResponse(null,
        'No se pudo cargar la lista de oficialias.', true);
    }
  }
  
  protected function getDuenoDocProbatorio($indice)
  {
    if(!isset($this->_duenos_docs_probatorios[$indice])){
      return 'No definido';
    } else {
      return $this->_duenos_docs_probatorios[$indice];
    }
  }

  protected function getListaDuenoDocProbatorio()
  {
    return $this->_duenos_docs_probatorios;
  }

  /**
   * Devuelve la proposicion especificada por $indice
   * 
   * @param int $indice
   * @return string
   */
  protected function getProposicion($indice)
  {
    return $this->_proposicion[$indice];
  }

  /**
   * Devuelve la lista de proposiciones
   * 
   * @return array
   */
  protected function getListaProposicion()
  {
    return $this->_proposicion;
  }

  /**
   * Devuelve el fundamento del promovente, especificado por $indice
   * 
   * @param int $indice
   * @return string
   */
  protected function getFundamentoPromovente($indice)
  {
    if(!isset($this->_fundamentos_promovente[$indice])){
      return 'NO DISPONIBLE';
    } else {
      return $this->_fundamentos_promovente[$indice];
    }
  }
  
  /**
   * Devuelve la lista de fundamentos del promovente
   * @return array
   */
  protected function getListaFundamentosPromovente()
  {
    return $this->_fundamentos_promovente;
  }
  
  /**
   * Devuelve el fundamento de resolucion especificado por $indice
   * 
   * @param int $indice
   * @return string
   */
  protected function getFundamentoResolucion($indice)
  {
    if(!isset($this->_fundamentos_resolucion[$indice])){
      return 'NO DISPONIBLE';
    } else {
      return $this->_fundamentos_resolucion[$indice];
    }
  }
  
  /**
   * Devuelve la lista de fundamentos de resolucion
   * @return array
   */
  protected function getListaFundamentosResolucion()
  {
    return $this->_fundamentos_resolucion;
  }
  
  /**
   * Devuelve un array asociativo con la lista de tipos de extracto
   * @return array
   */
  protected function getListaTiposExtracto()
  {
    return $this->_tipos_extractos;
  }
  
  /**
   * Devuelve el nombre de un tipo de extracto definido por su key $tipo_extr
   * 
   * @param int $tipo_extr
   * @return string
   */
  protected function getTipoExtracto($tipo_extr){
    if(!isset($this->_tipos_extractos[$tipo_extr])){
      return 'NO DISPONIBLE';
    } else {
      return $this->_tipos_extractos[$tipo_extr];
    }
  }
  
  /**
   * Devuelve los datos del usuario firmado con MainLogin de DGRC
   * @return array
   */
  public function getDGRCUserData()
  {
    return $_SESSION[$this->QuarkSession->getSessionName()]['data']['logged_user'];
  }
  
  /**
   * Metodo para generar el header, generalmente invocado desde la vista
   */
  public function header($css_files = array())
  {
    foreach($css_files as $css_file){
      $this->appendCssFiles($css_file);
    }
    $this->renderView('layout/header.php');
  }
  
  /**
   * Metodo para generar el footer, generalmente invocado desde la vista
   */
  public function footer($js_files = array())
  {
    foreach($js_files as $js_file){
      $this->appendJsFiles($js_file);
    }
    $this->renderView('layout/footer.php');
  }
  
  /**
   * Define el titulo de la seccion actual, este metodo es generalmente
   * utilizado en los metodos del controller antes de renderizar la vista
   */
  public function setSectionTitle($title)
  {
    $this->_section_title = $title;
  }
  
  /**
   * Imprime el titulo de la seccion actual, este metodo es generalmente
   * utilizado en las vistas
   */
  public function printSectionTitle()
  {
    if($this->_section_title != ''){
      echo ' / ', $this->QuarkStr->esc($this->_section_title, true);
    }
  }
    
  public function quarkAccessDenied()
  {
    if(QUARK_AJAX){
      $this->setAjaxAccessDenied();
    } else {
      /*
       * Cargar clase para hacer login en DGRC
       */
      require '../../lib/dgrc/MainLogin.php';

      // Juridico Web tiene el APP ID 9
      MainLogin::login(
        $this->QuarkSession->getSessionName(),
        9,
        $this->QuarkURL->getBaseURL()
      );
    }
  }

  public function expandDate($date)
  {
    return (object)array(
      'day'  => substr($date, 8, 2),
      'month' => substr($date, 5, 2),
      'year'  => substr($date, 0, 4)
    );
  }
}
